#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include <string.h>
uint8_t Key_Num; //按键获取键码

/**
  * 函    数：按键初始化
  * 参    数：无
  * 返 回 值：无
  */
void Key_Init(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//开启GPIOA的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);		//开启GPIOC的时钟
    
    
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA0和PC13引脚初始化为上拉输入
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/**
  * 函    数：按键获取键码
  * 参    数：无
  * 返 回 值：按下按键的键码值，范围：0~2，返回0代表没有按键按下
  * 注意事项：此函数是阻塞式操作，当按键按住不放时，函数会卡住，直到按键松手
  */
uint8_t Key_GetNum(void)
{
    uint8_t temp = Key_Num;
    Key_Num = 0;
    return temp;    
}


uint8_t Key_GetState()
{
    if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1)
    {
        return 1;
    }
    if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 1)
    {
        return 2;
    }
    return 0;
}


void Key_Tick(void)
{
    static uint8_t Count, CurrState, PrevState;
    Count++;
    if (Count >= 20)
    {
        Count = 0;
        PrevState = CurrState;
        CurrState = Key_GetState();
        if (CurrState == 0 && PrevState !=0) // 上次return返回的值是按键标志见line 41 ,line 45
        {
            Key_Num = PrevState;
        }
    }
}


